public class CircularQueue {
    public int[] elem;
    public int useSize;
    public int front;
    public int rear;


    public CircularQueue(int k) {
        this.elem=new int[k];
    }

    public boolean enQueue(int value) {
        if (isFull()){
            return false;
        }
        this.elem[rear]=value;
        //千万不能加加rear++;
        rear=(rear+1)%elem.length;
        useSize++;
        return true;
    }

    public boolean deQueue() {
        if (isEmpty()){
            return  false;
        }

        front=(front+1)%elem.length;
        useSize--;
        return true;
    }
    //获取对头元素
    public int Front() {
        if (isEmpty()){
            return  -1;
        }
        return elem[front];
    }
    //获取对尾元素
    public int Rear() {
        if (isEmpty()){
            return  -1;
        }
        /**\
         * int index = (rear==0)?elem.length-1:rear-1;
         * return elem[index];
         */
        if (rear==0){
            return elem[elem.length-1];
        }
        return elem[rear-1];
    }

    public boolean isEmpty() {
        return useSize==0;
    }

    public boolean isFull() {

        return useSize==elem.length;
    }
}
